package com.clwl.supervise.superviseapp.service.base;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.clwl.supervise.superviseapp.entity.base.TcCompany;
import com.clwl.supervise.superviseapp.entity.risk.JgSpjyxk;
import com.clwl.supervise.superviseapp.mapper.base.JgDsjMapper;
import com.clwl.supervise.superviseapp.mapper.risk.JgSpjyxkMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Map;

@Service
@Slf4j
public class JgAllRiskLevelService {
    @Resource
    private JgDsjMapper yzwfsxmdMapper;
    @Resource
    private JgSpjyxkMapper jgSpjyxkMapper;

    /**
     * 食品销售
     *
     * @param company    主体信息
     * @param totalScore 总分值
     * @return
     */
    public String findRiskSaleBusiness(TcCompany company, Double totalScore) {
        //按统一社会代码，查询列严信息
        Map<String, Object> lieYanByCreditCode = yzwfsxmdMapper.getLieYanByCreditCode(company.getCreditCode());
        //获取禽水产品
        boolean companyLevelStatus = findAdsJgSpjyxkByLisenceNo(company.getLicense(), company.getIsFrozenFoodProducts());
        String riskLevel = null;
        boolean result = checkAquaticProduct(company);
        //一、校园及其周边100米范围内食品经营者、食用农产品（食品）批发市场评级时不管分数,并且被列入失信
        if ("1".equals(company.getIsXiaoyuan()) || lieYanByCreditCode != null) {
            //锁死为D级
            riskLevel = "D";
        }
        //二、按其他规则验证等级
        //1.食品销售者:食品销售者且经营品种包含畜禽水产品（许可系统对接），最低级别为B级 （文档序号：2）
        else if (company.getCompanyTypeId() == 2L && result) {
            //获取分值 最低级别为B级
            riskLevel = checkRiskLevelByScore(totalScore, 1);
        }
        //2：食品销售者:食品销售者且仅销售预包装食品,不在校园及其周边100米范围内食品经营者。（文档序号：4）
        else if (company.getCompanyTypeId() == 2L && "1".equals(company.getIsYbz())) {
            riskLevel = checkRiskLevelByScore(totalScore, 2);
        } else if (company.getCompanyTypeId() == 2L) {// 2025-1-9 新增代码 lu
            riskLevel = checkRiskLevelByScore(totalScore, 2);
        }
        //3.食品销售者：食品销售者且经营项目中含“制售”字段的，不得低于B级：即当风险分值小于30分时，强制定级为B级及以上。（文档序号：6）
        //天津银石宜嘉商贸有限公司
        else if (company.getCompanyTypeId() == 2L && StringUtils.contains(company.getBusinessScope(), "制售")) {
            //获取分值 最低级别为B级
            riskLevel = checkRiskLevelByScore(totalScore, 1);
        }
        //4:食品销售者:食品销售者且经营项目包含特殊食品销售。(文档序号：7) 略
        //天津银石宜嘉商贸有限公司
        else if (company.getCompanyTypeId() == 2L && StringUtils.contains(company.getBusinessScope(), "特殊食品销售")) {
            //获取分值
            riskLevel = checkRiskLevelByScore(totalScore, 2);
        }

        //5:食用农产品销售者:食用农产品销售者且经营品种包含畜禽水产品，不得低于B级：即当风险分值小于30分时，强制定级为B级及以上.(文档序号：8)
        else if (company.getCompanyTypeId() == 5L && companyLevelStatus) {
            //获取分值 最低级别为B级
            riskLevel = checkRiskLevelByScore(totalScore, 1);
        }

        //6:食用农产品销售者,(文档序号：11) 走 else {}
//            else if (tcCompany.getCompanyTypeId() == 5L) {
//                //获取分值
//                String riskLevel = checkRiskLevelByScore(totalScore, 2);
//                String risk = calculationRiskLevel(riskLevel, selectedD, selectedUp, selectedDown, adjustLevel);
//                jgRiskLevel.setRiskLevel(risk);
//            }

        //食用农产品（食品）批发市场
        //7:食品销售连锁企业总部,食品销售连锁企业总部（新增）强制定级为D级 联锁企业总部(13)
        //8:集中交易市场开办者:集中交易市场开办者且是食用农产品（食品）批发市场强制定级为D级。(文档序号：14)
        else if (company.getCompanyTypeId() == 13L || (company.getCompanyTypeId() == 3L && "1".equals(company.getIsGongpi()))) {
            //锁死为D级
            riskLevel = "D";
        }
        //8:companyTypeId:3集中交易市场开办者:(文档序号：17)
        //9:网络食品交易(含网络餐饮服务)第三方平台提供者:(文档序号：18)
        else if ((company.getCompanyTypeId() == 3L && !"1".equals(company.getIsGongpi())) || company.getCompanyTypeId() == 4L) {
            //获取分值
            riskLevel = checkRiskLevelByScore(totalScore, 2);
        }
        //10:食品(食用农产品)贮存服务提供者，最低级别为B级。 (文档序号：19)
        else if (company.getCompanyTypeId() == 6L && "1".equals(company.getIsFrozenFoodStorage())) {
            //获取分值
            riskLevel = checkRiskLevelByScore(totalScore, 1);
        } else {
            riskLevel = checkRiskLevelByScore(totalScore, 2);
        }
        return riskLevel;
    }

    /**
     * 餐饮服务
     *
     * @param company    主体信息
     * @param totalScore 总分值
     * @return
     */
    public String findRiskCateringBusiness(TcCompany company, Double totalScore) {
        String riskLevel = null;
        //按统一社会代码，查询列严信息
        Map<String, Object> lieYanByCreditCode = yzwfsxmdMapper.getLieYanByCreditCode(company.getCreditCode());
        //一、校园及其周边100米范围内食品经营者、食用农产品（食品）批发市场评级时不管分数,并且被列入失信 (文档序号：28)
        //1.社会餐饮服务经营者:强制定级 为D级后，不可以进行调高或调低等级。
        boolean verifySchool = getVerifySchool(company);
        if (verifySchool || lieYanByCreditCode != null) {
            //锁死为D级
            riskLevel = "D";
        }
        //companyTypeId:2-社会餐饮服务经营者，最低级别为B级
        //companyTypeId:5-固定食品制售摊贩，设座小餐饮固定食品制售餐饭，最低级别为B级
        //companyTypeId:21-小餐饮，设座小餐饮固定食品制售餐饭，最低级别为B级
        else if (company.getCompanyTypeId() == 2L || (company.getCompanyTypeId() == 5L &&
                "1".equals(company.getIsShezuo())) || (company.getCompanyTypeId() == 21L &&
                "1".equals(company.getIsShezuo()))) {
            //1:最低级别为:B
            riskLevel = checkRiskLevelByScore(totalScore, 1);
        }
        //getCompanyTypeTwoId:13 其他食堂
        //getCompanyTypeTwoId:14 职工食堂
        //getCompanyTypeTwoId:32 托管服务机构食堂
        //getCompanyTypeTwoId:33 机关单位食堂
        //getCompanyTypeTwoId:34 监狱食堂
        //getCompanyTypeTwoId:35 月子会所食堂
        //getCompanyTypeTwoId:37 托育机构食堂
        else if ((company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 13) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 14) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 32) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 33) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 34) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 35) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 37)) {
            riskLevel = checkRiskLevelByScore(totalScore, 1);
        }
        //2.中央厨房和集体用餐配送单位,强制定级为D级。  (文档序号：28)
        //- 3.单位食堂（学校食堂）学校食堂、托幼机构食堂、养老机构食堂、医疗机构食堂、建筑工地食堂、职工食堂、托育机构食堂、托幼机构食堂等.强制定级为D级。
        //- 4:餐饮服务连锁企业总部,餐饮服务连锁企业总部:强制定级为D级
        //- 7:养老机构食堂
        //8:学校（含托幼机构）食堂
        //9:医疗机构食堂
        //10:工地食堂
        //11:中央厨房
        //12:集体用餐配送单位
        //29:餐饮服务连锁企业总部
        //30:餐饮服务管理企业
        //21:不设座的小餐饮，强制D级
        //：4 单位食堂(学校食堂)定级为D级别
        //companyTypeId：4 单位食堂(学校食堂) 、getCompanyTypeTwoId：7 养老机构食堂
        //companyTypeId：4 单位食堂(学校食堂) 、getCompanyTypeTwoId：8 学校（含托幼机构）食堂
        //companyTypeId：4 单位食堂(学校食堂) 、getCompanyTypeTwoId：9 医疗机构食堂
        //companyTypeId：4 单位食堂(学校食堂) 、getCompanyTypeTwoId：10 工地食堂
        else if (company.getCompanyTypeId() == 3L ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 7) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 8) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 9) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 10) ||
                (company.getCompanyTypeId() == 4L && company.getCompanyTypeTwoId() == 38) ||
                company.getCompanyTypeId() == 11 ||
                company.getCompanyTypeId() == 12 ||
                company.getCompanyTypeId() == 29 ||
                company.getCompanyTypeId() == 30 ||
                (company.getCompanyTypeId() == 21 && "0".equals(company.getIsShezuo()))) {

            //锁死为D级
            riskLevel = "D";
        } else {
            //2:最低级别为:A
            riskLevel = checkRiskLevelByScore(totalScore, 2);
        }
        return riskLevel;
    }

    public static void main(String[] args) {
        Long a = 21L;
        Long b = 21L;
        System.out.println(a == 21L);
    }

    private boolean checkAquaticProduct(TcCompany company) {
        /**
         * 0 猪肉
         * 1 牛肉
         * 2 禽类及其产品
         * 3 水产品
         */
        if ((company.getCompanyTypeId() == 3L || company.getCompanyTypeId() == 5L) && StringUtils.isNotEmpty(company.getBusinessScope())) {
            if (company.getBusinessScope().contains("猪肉") || company.getBusinessScope().contains("牛羊肉") || company.getBusinessScope().contains("禽类及其产品") || company.getBusinessScope().contains("水产品")) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }


    public boolean findAdsJgSpjyxkByLisenceNo(String license, String isFrozenFoodProducts) {
        JgSpjyxk spjyxkEntity = findAdsJgSpjyxkByLisenceNo(license);
        if (spjyxkEntity != null && (spjyxkEntity.getZsncppl().contains("猪肉") || spjyxkEntity.getZsncppl().contains("牛羊肉") || spjyxkEntity.getZsncppl().contains("禽类及其产品") || spjyxkEntity.getZsncppl().contains("水产品"))) {
            return true;
        }
        //新增：是否为经营品种包含畜禽水产品的食品销售者：0否，1是  lu
        else if (StringUtils.isNotEmpty(isFrozenFoodProducts) && isFrozenFoodProducts.equals("1")) {
            return true;
        } else {
            return false;
        }

    }

    @DS("ads")
    public JgSpjyxk findAdsJgSpjyxkByLisenceNo(String license) {
        return jgSpjyxkMapper.selectByLicense(license);

    }

    /**
     * 按分值验证评级
     *
     * @param totalScore 分数
     * @return
     */
    private String checkRiskLevelByScore(Double totalScore, Integer type) {
        if (type == 1) {
            if (totalScore <= 45) {
                return "B";
            } else if (totalScore > 45 && totalScore <= 60) {
                return "C";
            } else if (totalScore > 60) {
                return "D";
            }
        } else {
            //通过计算的分数进行判断风险等级
            if (totalScore <= 30) {
                return "A";
            } else if (totalScore > 30 && totalScore <= 45) {
                return "B";
            } else if (totalScore > 45 && totalScore <= 60) {
                return "C";
            } else if (totalScore > 60) {
                return "D";
            }
        }

        return "A";
    }


    private boolean getVerifySchool(TcCompany company) {
        //companyTypeId:2 社会餐饮服务经营、companyTypeTwoId：23：餐饮服务连锁企业总部(不强制定级D)
        //companyTypeId:3 中央厨房和集体用餐配送单位。 companyTypeTwoId：11 中央厨房(不强制定级D)
        //companyTypeId：29 餐饮服务连锁企业总部、companyTypeId：3 0餐饮服务管理企业(不强制定级D)
        if ((company.getCompanyTypeId().equals("2") && !company.getCompanyTypeTwoId().equals("23")) && "1".equals(company.getIsXiaoyuan())) {
            return true;
        } else if ((!company.getCompanyTypeId().equals("3") || !company.getCompanyTypeTwoId().equals("11")) && "1".equals(company.getIsXiaoyuan())) {
            return true;
        } else if ((!company.getCompanyTypeId().equals("29") || !company.getCompanyTypeId().equals("30")) && "1".equals(company.getIsXiaoyuan())) {
            return true;
        } else {
            return false;
        }
    }

}
